package com.webermagem.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.hibernate.Session;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import com.webermagem.DAO.TipoSintomaDAO;
import com.webermagem.DAO.SintomaDAO;
import com.webermagem.model.TipoSintoma;
import com.webermagem.model.Sintoma;
import com.webermagem.model.SintomaDataModel;
import com.webermagem.util.SessionManager;

@ManagedBean
@SessionScoped
public class SintomaController implements Serializable {

	private static final long serialVersionUID = 1L;

	private Sintoma novoSintoma = new Sintoma();
	private Sintoma sintoma;
	private Sintoma sintomaPesq = new Sintoma();
	private List<Sintoma> listaSintomas;
	private List<SelectItem> listaTipoSintomas;
	private SintomaDataModel sintomaModel;
	private SintomaDAO sintomaDao = new SintomaDAO();
	private TipoSintomaDAO tipoSintomaDao = new TipoSintomaDAO();

	private TipoSintoma tipoSintomaSelecionado = new TipoSintoma();
	
	// ADICIONA
	public void adicionarSintoma(ActionEvent actionEvent){
		
		novoSintoma.setTipoSintoma(tipoSintomaSelecionado);
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("user", novoSintoma);
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		sintomaDao.save((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), novoSintoma);
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Sucesso", "Sintoma adicionado com Sucesso!"));
		novoSintoma = new Sintoma();
		
	}
	
    public void onRowSelect(SelectEvent event) {
    	sintoma = (Sintoma)(sintomaModel.getRowData());
    }
    
	// ALTERA
	public void alterarSintoma(ActionEvent actionEvent){
		
		sintoma.setTipoSintoma(tipoSintomaSelecionado);
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		sintomaDao.update((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), sintoma);
		FacesContext context = FacesContext.getCurrentInstance();  
		context.addMessage(null, new FacesMessage("Sucesso", "Sintoma atualizado com Sucesso!"));
	}

	// EXCLUIR
	public void excluirSintoma(ActionEvent actionEvent){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		sintomaDao.remove((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), sintoma);
		FacesContext context = FacesContext.getCurrentInstance();  
		context.addMessage(null, new FacesMessage("Sucesso", "Sintoma excluido com Sucesso!"));
	}
	
	// CONSULTAR
	public void pesquisarSintoma(ActionEvent actionEvent){
		
		RequestContext context = RequestContext.getCurrentInstance();
		context.addCallbackParam("user", sintomaPesq);
		
	}
	
	// GETS E SETTERS

	public SintomaDAO getSintomaDao() {
		return sintomaDao;
	}

	public void setSintomaDao(SintomaDAO sintomaDao) {
		this.sintomaDao = sintomaDao;
	}

	public Sintoma getSintoma() {
		return sintoma;
	}

	public void setSintoma(Sintoma sintoma) {
		this.sintoma = sintoma;
	}

	public SintomaDataModel getSintomaModel() {
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		if(sintomaPesq == null ||  sintomaPesq.getDescricao() == null || sintomaPesq.getDescricao().equals("") ) {
			
			listaSintomas = (List<Sintoma>) sintomaDao.listOrdenado((Session)SessionManager.getSessionAttribute(facesContext, "transacao"));
			
			listaTipoSintomas = new ArrayList<SelectItem>();
			for (Object objeto : tipoSintomaDao.list((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), " from TipoSintoma ")) {
				TipoSintoma tipoSintoma = (TipoSintoma)objeto;
				listaTipoSintomas.add(new SelectItem(tipoSintoma, tipoSintoma.getDescricao()));  
	        } 
			
		} else {
			
			listaSintomas = sintomaDao.listByDescricao((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), sintomaPesq.getDescricao());
			
		}
		
		sintomaModel = new SintomaDataModel(listaSintomas);
		
		return sintomaModel;
		
	}

	public void setSintomaModel(SintomaDataModel sintomaModel) {
		this.sintomaModel = sintomaModel;
	}

	public List<Sintoma> getListaSintomas() {
		return listaSintomas;
	}

	public void setListaSintomas(List<Sintoma> listaSintomas) {
		this.listaSintomas = listaSintomas;
	}

	public Sintoma getNovoSintoma() {
		return novoSintoma;
	}

	public void setNovoSintoma(Sintoma novoSintoma) {
		this.novoSintoma = novoSintoma;
	}

	public Sintoma getSintomaPesq() {
		return sintomaPesq;
	}

	public void setSintomaPesq(Sintoma sintomaPesq) {
		this.sintomaPesq = sintomaPesq;
	}

	public List<SelectItem> getListaTipoSintomas() {
		return listaTipoSintomas;
	}

	public void setListaTipoSintomas(List<SelectItem> listaTipoSintomas) {
		this.listaTipoSintomas = listaTipoSintomas;
	}

	public TipoSintoma getTipoSintomaSelecionado() {
		return tipoSintomaSelecionado;
	}

	public void setTipoSintomaSelecionado(TipoSintoma tipoSintomaSelecionado) {
		this.tipoSintomaSelecionado = tipoSintomaSelecionado;
	}
	
}